#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>


int main()
{
	int* p = (int*)malloc(40);
	if (p == NULL)
	{
		return 1;
	}

	//使用
	free(p);

	free(p);//重复释放，报错

	return 0;
}

//int main()
//{
//
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		printf("malloc");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		*p = i + 1;
//		p++;  //此时p不在指向malloc开辟的空间的起始地址
//	}
//	//释放
//	free(p);
//	p = NULL;
//	return 0;
//}

//int main()
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	//初始化为1~10
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		p[i] = i + 1;
//	}
//	//增加一些空间
//	int* ptr = (int*)realloc(p, 80);
//	if (ptr != NULL)
//	{
//		p = ptr;
//		ptr = NULL;
//	}
//	else
//	{
//		perror("realloc");
//		return 1;
//	}
//	//开辟成功，打印数据
//	for (i = 0; i < 20; i++)
//	{
//		printf("%d\n", p[i]);
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

//
//int main()
//{
//	int* p = (int*)calloc(10, sizeof(int));//开辟十个连续的sizeof(int)大小的空间
//	if (p == NULL)
//	{
//		perror("calloc");
//		return 1;
//	}
//	//打印数据
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	//释放
//	free(p);
//	p = NULL;
//	return 0;
//}

//int main()
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	//开辟成功
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d\n", *(p + i));
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

//int main()
//{
//	int a = 10;//在栈空间开辟四个字节
//	char arr[10] = { 0 };//在栈空间开辟十个字节的连续空间
//	return 0;
//}